Cómo podemos hacer para leer una fecha en un formato como 20110920??
La fecha está "empaquetada" en el número, porque el número 20.110.920 dentro tiene 2011, 09, y 20 que significa 20 de Setiembre de 2011. Esta forma de empaquetar fechas en un solo número se utiliza con frecuencia.
La cuestión es cómo obtenemos las partes de la fecha a partir del número. Primero, de hecho, leeremos la fecha y la guardaremos en una variable:
int fecha; cin >> fecha;
Ahora, lo que queremos es obtener el anyo, el mes y el dia a partir de fecha. Declaremos, entonces, los 3 enteros:
int dia, mes, anyo;
Una observacion interesante es que cuando hacemos la división entera entre un número y 100, por ejemplo, el número "pierde" dos dígitos. O sea, 5413 / 100 da 54, 90871 / 100 da 908 y 12345 / 100 da 123. Por otro lado, si haces módulo 100 te quedas con las últimas 2 cifras. Por ejemplo: 123 % 100 da 23, 5413 % 100 da 13 y 90871 % 100 da 71.
Si aplicamos esto al número 20110920 pero con 10000, veremos que para obtener el 2011 se puede dividir fecha por 10000. Por tanto, tenemos:
anyo = fecha / 10000;
Ahora, para obtener el día, podemos hacer algo distinto: la expresión 20110920 / 100 da 201109 pero el resto da 20, que es el día. Por tanto podemos poner:
dia = fecha % 100;
Finalmente necesitamos también el mes. Aquí hay dos opciones, primero podemos pasar 20110920 a 201109 y luego hacer módulo 100
mes = (fecha / 100) % 100;
o podemos sacar el 0920 primero y luego dividir por 100
mes = (fecha % 10000) / 100;
Ambas soluciones son correctas. Aquí está el programa completo:
int fecha; cin >> fecha; int dia, mes, anyo; anyo = fecha / 10000; dia = fecha % 100; mes = (fecha / 100) % 100;
Otra forma de hacer lo mismo es modificar fecha para cada trozo que obtenemos. Si empezamos por el dia
dia = fecha % 100; fecha = fecha / 100;
Ahora la fecha se ha quedado en 201109 con lo cual sacar el mes es más fácil que antes
mes = fecha % 100; fecha = fecha / 100;
Finalmente, la fecha se ha reducido a 2011, que es el año mismo
anyo = fecha
Esta solución és más homogénea porque se utiliza la misma técnica todo el rato y serviría para números con más partes.
Aquí está el programa completo:
int fecha; cin >> fecha; dia = fecha % 100; fecha = fecha / 100; mes = fecha % 100; fecha = fecha / 100; anyo = fecha;
En preparación